package entidades;

import java.util.ArrayList;
import java.sql.Date;
import java.util.List;
import java.util.Objects;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

@Entity
public class Paciente extends Usuario {

    private static final long serialVersionUID = 1L;
    @Column(nullable = false)
    private String numSeguridadSocial;
    @OneToOne(cascade = CascadeType.PERSIST)
    @JoinColumn(nullable = false)
    private HistoriaClinica hClinica = new HistoriaClinica();
    @OneToMany(mappedBy = "paciente",cascade = CascadeType.REMOVE)
    @JoinColumn(nullable = false)
    private List<Cita> cita;

    @ManyToMany(mappedBy = "paciente")
    private List<ListaDeEspera> listaDeEspera;
    
    @ManyToMany(mappedBy = "paciente_consultable")
    private List<Medico> medico_Consultor;
    
    @ManyToOne
    private Medico medico;

    public Paciente() {
    }

    public Paciente(String dni, String password, String nombre, String apellidos, Date fechaNacimiento, String email, String telefono,
            String numSeguridadSocial) {
        setDni(dni);
        setPassword(password);
        setNombre(nombre);
        setApellidos(apellidos);
        setFechaNacimiento(fechaNacimiento);
        setEmail(email);
        setTelefono(telefono);
        this.numSeguridadSocial = numSeguridadSocial;
    }

    public String getNumSeguridadSocial() {
        return numSeguridadSocial;
    }

    public void setNumSeguridadSocial(String numSeguridadSocial) {
        this.numSeguridadSocial = numSeguridadSocial;
    }

    public HistoriaClinica gethClinica() {
        return hClinica;
    }

    public void sethClinica(HistoriaClinica hClinica) {
        this.hClinica = hClinica;
    }

    public List<Cita> getCita() {
        return cita;
    }

    public void setCita(List<Cita> cita) {
        this.cita = cita;
    }

    public List<ListaDeEspera> getListaDeEspera() {
        return listaDeEspera;
    }

    public void setListaDeEspera(List<ListaDeEspera> listaDeEspera) {
        this.listaDeEspera = listaDeEspera;
    }

    public List<Medico> getMedico_Consultor() {
        return medico_Consultor;
    }

    public void setMedico_Consultor(List<Medico> medico_Consultor) {
        this.medico_Consultor = medico_Consultor;
    }



    public Medico getMedico() {
        return medico;
    }

    public void setMedico(Medico medico) {
        this.medico = medico;
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 83 * hash + Objects.hashCode(super.getDni());
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Paciente other = (Paciente) obj;
        if (!Objects.equals(super.getDni(), other.getDni())) {
            return false;
        }
        return true;
    }
    



    @Override
    public String toString() {
        return "Paciente{" + "numSeguridadSocial=" + numSeguridadSocial + '}';
    }
}
